package com.duke.duke.javaagent.base01.example;

import com.sun.tools.attach.VirtualMachine;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;

/**
 * 利用java agent 动态代理技术 实现一个简化版的 Arthas
 * agentmain
 * @author gjy
 * @create 2024-11-22 2:54 PM
 */
public class SimpleArthasMain {
    public static void main(String[] args) throws Exception {
        System.out.println("... 欢迎进入简化版的 Arthas ...");
        System.out.println("");

        // 获取当前 Java 程序的进程 ID，利用java 代码执行 "jps" 命令
        try {
            // 执行 jps 命令
            Process process = Runtime.getRuntime().exec("jps");
            // 读取 jps 命令的输出
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
                String line;
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        //在 Java 中，可以使用 Scanner 或 BufferedReader 等类从控制台获取输入字符串。这两种方法分别适用于简单场景和更复杂的输入需求
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个要监控的进程ID: ");
        // 获取一整行输入
        String processId = scanner.nextLine();
        System.out.println("你输入的进程ID是: " + processId);
        scanner.close();

        //获取进程虚拟机对象
        VirtualMachine attach = VirtualMachine.attach(processId);
        //执行java agent里边的agentmain方法
        attach.loadAgent("/Users/jingyuangao/Documents/code-work/sre-share/javaagent-bash-01/duke-javaagent-base-01/target/gaojy-share-test-agent.jar");


    }
}
